$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

// 数组扩展
Array.prototype.indexOf = function(val) { // prototype 给数组添加属性
	for (var i = 0; i < this.length; i++) { // this是指向数组，this.length指的数组类元素的数量
		if (this[i] == val)
			return i; // 数组中元素等于传入的参数，i是下标，如果存在，就将i返回
	}
	return -1;
};

Array.prototype.remove = function(val) { // prototype 给数组添加属性
	var index = this.indexOf(val); // 调用index()函数获取查找的返回值
	if (index > -1) {
		this.splice(index, 1); // 利用splice()函数删除指定元素，splice() 方法用于插入、删除或替换数组的元素
	}
};

Function.prototype.getName = function(){
    return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]
}


var Debug = (function(){	
	return {
		alert:function(message){
			//console.info(message);
			alert(message);
		}
	}
})();

var Util = (function(){
	
	return {
		
		
		/**
		 * options.url
		 * options.title
		 * options.rate:弹出窗的比例，默认0.8
		 * options.height:窗口高度
		 * options.width:窗口宽度
		 * options.id: window对象ID
		 * options.iconCls: 图标样式
		 * options.closeEvent	窗口关闭事件
		 */
		openDialog:function(options){
			var dialogId = options && options.id ? options.id :"dialog_" + new Date().getTime();
			var url = options && options.url ? options.url:"";
			var title = options && options.title ? options.title:"系统窗口";
			var rate = options && options.rate ? options.rate:0.8;
			var iconCls = options && options.iconCls ? options.iconCls:'icon-grid';
			
			var dialogWidth= options && options.width ? options.width : $(window).width() * rate;
			var dialogHeight = options && options.height ? options.height : $(window).height() * rate;
		
			 $("<div></div").attr("id", dialogId).window({
				 iconCls:iconCls,
				cache:false,
				width:dialogWidth,
				height:dialogHeight,
				title:title,
				modal: true,
				onClose:options.closeEvent
			});
			$("<iframe></iframe>").attr("src", url).attr("height", "100%").attr("width","100%").attr("frameBorder", "0").appendTo("#"+dialogId);
		},
		closeDialog:function(dialogId){
			$("#" + dialogId).dialog('destroy');
		}
		/**
		 * 弹出一个窗口，系统将创建一个EasyUI的dialog对象
		 * options:对话框的配置项，包括以下属性
		 * 		options.url:页面的一个地址
		 * 		options.rate:弹出窗在父窗口的比例，默认是0.8
		 * 		options.width: 弹出窗的宽度
		 * 		options.height: 弹出窗的高度
		 * 		options.iconCls: 图标样式
		 * 		options.id: 弹出窗的ID
		 * 		options.title: 弹出窗的标题
		 * 		options.buttons:弹出窗的按钮数组,每个元素的定义是：{iconCls:xxx, text:xxx, handler:fn},例如：buttons:[{iconCls:xxx, text:xxx, handler:fn}]
		 *		options.openDialogObj: 打开弹窗页面的JS对象，用于在弹窗子页面中回调“打开弹窗页面”定义的函数，
		 *								例如：在弹窗子页面的“确定”按钮时，将选中的数据设置回“打开弹窗的页面”。
		 *		options.confirmCallbackMethod: 对话框确认按钮的回调方法
		 *		options.cancelCallbackMethod: 对话框取消按钮的回调方法
		 */
		,dialog:function(options){
			var url = options && options.url ? options.url : "";
			var rate = options && options.rate ? options.rate:0.8;
			var dialogWidth= options && options.width ? options.width : $(window).width() * rate;
			var dialogHeight = options && options.height ? options.height : $(window).height() * rate;
			var iconCls = options && options.iconCls ? options.iconCls:'icon-grid';
			var dialogId = options && options.id ? options.id : "dialog_" + new Date().getTime();
			var title = options && options.title ? options.title : "系统窗口";
			var openDialogObj = options && options.openDialogObj ? options.openDialogObj : undefined;
			var confirmCallbackMethod = options && options.confirmCallbackMethod ? options.confirmCallbackMethod : undefined;
			var cancelCallbackMethod = options && options.cancelCallbackMethod ? options.cancelCallbackMethod : undefined;
			var onCloseMethod = options && options.onClose ? options.onClose : undefined;
			
			var dialogOpts = {
				title: title,
				width: dialogWidth,
				height: dialogHeight,
				closed: false, 
				cache: false,
				iconCls:iconCls,
				modal: true
				,onClose:function(){
					$(this).dialog('destroy');	
					if(onCloseMethod){
						onCloseMethod.call(this);
					}
				}
			};
			if(options && options.buttons && options.buttons instanceof Array && options.buttons.length > 0){
				dialogOpts.buttons = options.buttons;
			}
			//先创建dialog，再创建iframe，可以避免iframe二次请求服务端
			var dialog = $("<div></div>").attr("id", dialogId).dialog(dialogOpts);
			var iframe = $("<iframe></iframe>").attr("src", url).attr("height", "99%").attr("width","100%").attr("frameBorder", "0").appendTo("#"+dialogId);
			iframe[0].contentWindow.openDialogObj = openDialogObj;
			iframe[0].contentWindow.confirmCallbackMethod = confirmCallbackMethod;
			iframe[0].contentWindow.cancelCallbackMethod = cancelCallbackMethod;
			iframe[0].contentWindow.dialogId = dialogId;
			return dialog;
		},
		
		/**
		 * 返回form所有表单域的值序列,如果是中文，将采用URL encode
		 */
		getFormParamSerialize:function(formId) {
			return $("#" + formId).serialize().replace(/\+/g, " ");
		},

		/**
		 * 将jquery.serialize()序列化字符串转成json对象
		 */
		serializeToJson:function(string, overwrite) {
			var obj = {}, pairs = string.split('&'), d = decodeURIComponent, name, value;
			$.each(pairs, function(i, pair) {
				pair = pair.split('=');
				name = d(pair[0]);
				value = d(pair[1]);
				obj[name] = overwrite || !obj[name] ? value : [].concat(obj[name])
						.concat(value);
			});
			return obj;
		},

		/**
		 * 获取指定表单的所有表单域的值,并包装在一个json对象中 return json
		 */
		getFormParams: function(formId) {
			return this.serializeToJson(this.getFormParamSerialize(formId));
		},
		
		/**
		 * 解析日期字符串，返回响应的Date对象, 格式为 yyyy-MM-dd HH:mm:ss
		 */
		parseDate:function(dateStr){
			if(!dateStr) return;
			
			var regexp = /(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})/;
			var result = regexp.exec(dateStr);
			if(result && result.length == 7){
			var date =	new Date();
				date.setFullYear(result[1], parseInt(result[2]) - 1, result[3]);
				date.setHours(result[4]);
				date.setMinutes(result[5]);
				date.setSeconds(result[6]);
				return date;
			}
		}
		
	}
})();

(function ($) {
    $.getUrlParam = function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
        	var ss = unescape(r[2]); 
        	return ss.toString();
        }else{
        	return '';
        }
    }
})(jQuery);

$.ajaxSetup({   
	complete:function(data,TS){   
        //对返回的数据data做判断，
        //session过期的话，就location到一个页面
        if (data != null && data.status !=null && data.status == '518') {
        	var contextPath = "${pageContext.request.contextPath}";
        	top.location.href = contextPath+"/sessionOverTime.do";
        }
    }   
});